/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarConvalidacionMateria;

import com.thoughtworks.xstream.XStream;
import entidad.Persona;
import entidad.convalidacionMateria.Solicitudconvalidacionmateria;
import hero.interfaces.BnNodeValue;
import java.io.IOException;

import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.context.FacesContext;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import org.apache.batik.transcoder.TranscoderException;
import wasolicitudesfiec.ConvalidacionMateria.ImprimirInformeSTA;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;
import web.util.Constantes;
import wasolicitudesfiec.xsl.pdf.Transformador;

/**
 *
 * @author kabad
 */
public class CTRL_ImprimirInformeSTA extends CTRL_Base {

    private ImprimirInformeSTA gui;
    private String nombreActividad = Constantes.SolicitarConvalidacion.imprimirInformeSTA;
    private String pathInforme;
    String nombreInstancia;
    private String nombreProceso = Constantes.Modelo.modelo_SolicitarConvalidacionMateria;

    public CTRL_ImprimirInformeSTA(ImprimirInformeSTA gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
        }
    }

    public void inicializar() throws MensajeException {
        Solicitudconvalidacionmateria solicitud;
        try {
            nombreInstancia = getNombreInstanciaProceso();
            this.inicializarInstancia(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitud);
             gui.getMenu().setTitulo(this.nombreProceso + "_" + idSolicitud + ": " + nombreActividad);
            gui.getLblAConvalidar().setText(solicitud.getAConvalidar());
            gui.getLblEstudiante().setText(solicitud.getEstudiante().getPersona().toString());
            gui.getLblMatricula().setText(solicitud.getEstudiante().getMatricula());
            gui.getLblMateria().setText(solicitud.getMateria().getNombre());
            gui.setIdSolicitud(idSolicitud);
             if (solicitud.getFkIdProfesor() != 0) {
                String recomendacion = "Tomando en consideración la recomendacion del evaluador: ";
                recomendacion += solicitud.getProfesor().getPersona().toString() + ". " + solicitud.getObservacionProfesor();
                gui.getTxtaResolucion().setValue(recomendacion);
            }
//            String path=generarInforme(idSolicitud);
//               gui.getLinkInforme().setUrl(Constantes.Rutas.rutaArchivos + path);
            gui.getLinkInforme().setUrl("/faces/CambioCarreraoEspecializacion/Informe.jsp" + "?idSolicitud=" + solicitud.getIdSolicitudConvalidacion());

        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception exception) {
            exception.printStackTrace();
            Logger.getLogger(CTRL_VolveraSolicitar.class.getName()).log(Level.SEVERE, null, exception);
            throw new MensajeException(Constantes.Mensajes.noInicia);
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }
    //genera pdf informe para sta

    private String generarInforme(int idSolicitud) throws SQLException, TransformerConfigurationException, IOException, TransformerException, TranscoderException, Exception {
        Solicitudconvalidacionmateria solicitud;
        Transformador transformador = new Transformador();
        String path = "";
        solicitud = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitud);
        Date fecha = new Date();

        Timestamp fechaActual = new Timestamp(fecha.getTime());
        fechaActual.setNanos(0);
        solicitud.setFechamodificacion(fechaActual);
        //conversion a svg usando xstream
        XStream xstream = new XStream();
        xstream.alias("informe", Solicitudconvalidacionmateria.class);
        String xml = xstream.toXML(solicitud);
        path = transformador.doIt(Constantes.Modelo.modelo_SolicitarConvalidacionMateria, xml, nombreInstancia, this.externalContext, null);
        return path.replaceAll(" ", "%20");
    }

    public void realizarActividad() throws MensajeException {
        BnNodeValue actividad;
        Solicitudconvalidacionmateria solicitud;
        try {
            this.inicializarInstancia(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
            solicitud = logica.getLogConvalidacionMateria().leerSolicitudConvalidacion(idSolicitud);
            solicitud.setResolucion((String) gui.getTxtaResolucion().getValue());
             Persona secretaria = logica.leerPersonaPorUsuario(usuario.getUsuario());
            solicitud.setFkIdSecretaria(secretaria.getIdPersona());
            solicitud.setEstado(Constantes.EstadoSolicitud.Terminada.toString());
            solicitud = logica.getLogConvalidacionMateria().guardarYClonarSolicitudConvalidacion(solicitud);
            prjSession.setNodeProperty(nombreActividad, Constantes.Atributo.idSolicitudActividad, solicitud.getIdSolicitudConvalidacion() + "");
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) {
            Logger.getLogger(CTRL_VolveraSolicitar.class.getName()).log(Level.SEVERE, null, ex);

            throw new MensajeException(Constantes.Mensajes.noGuarda);
        }
    }
}

